import java.util.Stack;

public class MinStack {
    //设计一个支持 push ，pop ，top 操作，并能在常数时间内检索到最小元素的栈。
    //实现 MinStack 类:
    //MinStack() 初始化堆栈对象。
    //void push(int val) 将元素val推入堆栈。
    //void pop() 删除堆栈顶部的元素。
    //int top() 获取堆栈顶部的元素。
    //int getMin() 获取堆栈中的最小元素
    Stack<Integer> stack ;
    Stack<Integer> minStack ;
    //初始化堆栈对象。
    public MinStack() {
        stack = new Stack<>();
        minStack = new Stack<>();
    }
    //将元素val推入堆栈。
    public void push(int val) {
        stack.push(val);
        if (minStack.empty() || val <= minStack.peek()){
            minStack.push(val);
        }
    }
    //删除堆栈顶部的元素。
    public void pop() {
        if (stack.empty()){
            return;
        }
       int val = stack.pop();
        if (val == minStack.peek()){
            minStack.pop();
        }
    }
    //获取堆栈顶部的元素。
    public int top() {
        return stack.peek();
    }
    //获取堆栈中的最小元素
    public int getMin() {
        if (stack.empty()){
            return -1;
        }
        return minStack.peek();
    }

    public static void main(String[] args) {
        MinStack minStack = new MinStack();
        minStack.push(-2);
        minStack.push(0);
        minStack.push(-1);
        System.out.println(minStack.getMin());
        System.out.println(minStack.top());
        minStack.pop();
        System.out.println(minStack.getMin());

    }
}
